<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>模块模式</title>
</head>

<body>
    <script>
        (function () {

            // 为单例创建私有变量和特权方法，所谓单例
            // 指的就是只有一个实例的对象，是以对象字面量的方式来创建单例对象
            // 通过为单例增加私有变量和特权方法能够使其得到增强

            // 如果必须要创建一个对象并以某些数据对其初始化
            // 同时还要公开一些能够访问这些私有的数据的方法，那么就使用模块模式
            // 以这种模块模式创建的每个单例都是Object的实例
            // 因此最终都要通过对象字面量来表示它
            var moduleFun=function(name){
                // 添加私有变量或函数
                var name=name;
                var array=[1,2,3,4,5];
                var isPass=true;
                // 返回 特权/公有的方法和属性
                return{
                    isPass:isPass,
                    getArrayLength:function(){
                        return array.length;
                    },
                    getName:function(){
                        return name;
                    }
                }
            }
            // 这种模式在需要对单例进行某些初始化，同时又需要维护其私有的变量时是非常有用的

            var moduleObj=moduleFun('whmk');
            console.log(moduleObj.isPass);
            console.log(moduleObj.getArrayLength());
            console.log(moduleObj.getName());
        })();
    </script>
</body>

</html>